#ifndef __EPD_2IN9_H
#define __EPD_2IN9_H

#include "main.h"
#include "spi.h"
#include "gpio.h"
#include <string.h>
#include "cmsis_os.h"

#define EPD_WIDTH 128
#define EPD_HEIGHT 296

#define EPD_FULL 1
#define EPD_PART 0

#define EPD_RST_PIN		EPD_RST_GPIO_Port, EPD_RST_Pin
#define EPD_DC_PIN		EPD_DC_GPIO_Port, EPD_DC_Pin
#define EPD_CS_PIN		EPD_CS_GPIO_Port, EPD_CS_Pin
#define EPD_BUSY_PIN	EPD_BUSY_GPIO_Port, EPD_BUSY_Pin

#define DEV_GPIO_Write(_pin, _value)	HAL_GPIO_WritePin(_pin, _value == 0 ? GPIO_PIN_RESET:GPIO_PIN_SET)
#define DEV_GPIO_Read(_pin)						HAL_GPIO_ReadPin(_pin)

extern uint8_t EPD_DisplayBuffer[EPD_WIDTH / 8 * EPD_HEIGHT];

void DEV_SPI_WriteByte(uint8_t value);
void EPD_Init(uint8_t Mode);
void EPD_SetFullBuffer(uint8_t data);
void EPD_Clear(uint8_t data);
void EPD_Display(uint8_t* Image);
void EPD_DisplayReverse(uint8_t* image);
void EPD_Sleep(void);
void EPD_Refresh(void);

#endif
